/**
 * gislin 2017年9月19日
 */
package com.btcode.orm.model;

import com.btcode.orm.relation.ex.IRelation;
import java.util.List;

/**
 * 设计思路 在.NET中，有分部类，可以把一个类中变化的和不变的分开 这种特性对于model来说很合适，model也分为变和不变两部分 1、不变的是表字段的映射关系，这部分可以通过代码生成器生成
 * 2、变的是关联关系，域信息，还有额外的业务逻辑，这部分要在具体的业务开展之后才能编写 所以设计IModelAddition的目的，就是把变化的这部分分出来，配合代码生成器，方便管理。
 * 如果表有变化，重新生成不变的部分，而变化的部分不至于被覆盖
 *
 * Addition和model成对出现，Addition的类名为model后加上Addition<br> 比如 UserModel的Addition为:UserModelAddition
 *
 * @author gislin 2017年9月19日
 */
public interface IModelAddition<T extends IModel> {

    /**
     * 生成默认值 可以根据业务需要 给一些字段生成默认值 比如当前系统时间，GUID等
     */
    void generateDefaultValue(T model);

    void initField(List<IField> fields);

    void initRelations(List<IRelation> relations);

    void initDomainField(List<IDomainField> domainFields);

    void beforeCreate(T model);

    void afterCreate(T model);

    void beforeUpdate(T model);

    void afterUpdate(T model);

    void beforeDelete(T model);

    void afterDelete(T model);
}
